#include <stdio.h>

int main(int argc, char *argv[])
{
    int input_num = 0;

    int arr[] = {1, 198, 234, 345, 346, 789, 880, 881, 882, 883, 884, 889, 890};
    // 数组元素个数
    int arr_len = sizeof(arr) / sizeof(int);
    // 查找下标
    int check_position = 0;
    // 初始左边界值
    int start = 0;
    // 初始又边界值
    int end = arr_len - 1;
    // 保存是否查找到
    int result = 0;

    printf("Input and check exists:");
    scanf("%d", &input_num);

     for (int i = 0; i < arr_len / 2; i++) {
         // 二分法查找， 这里取数组中间数
        check_position = (start + end) / 2;

        // 未命中时改变二分边界值
        if (arr[check_position] > input_num) {
            end = check_position;
        } else if(arr[check_position] < input_num) {
            start = check_position;
            // 命中时终止查找
        } else if (arr[check_position] == input_num) {
            result = 1;
            printf("exist: arr[%d] = %d\n", check_position, arr[check_position]);
            break;
        } 
        
        // 边界值特殊处理， 如果查找到最终相邻的两个元素
        // 则分别查看这两个元素是否为查找元素
        // 如果都不是， 则终止查找
        if (1 == end - start) {
            if (arr[end] == input_num) {
                result = 1;
                printf("exist: arr[%d] = %d\n", end, arr[end]);
                break;
            } else if (arr[start] == input_num) {
                result = 1;
                printf("exist: arr[%d] = %d\n", start, arr[start]);
                break;
            } else {
                break;
            }

        }

        // printf("start = %d end = %d\n", start, end);

     }
     
     if (result == 0) {
         printf("not exist !\n");
     }

    return 0;
}
